package ar.uba.fi.algo3.algoflight.controller;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;

import ar.uba.fi.algo3.algoflight.model.Posicion;
import ar.uba.fi.algo3.algoflight.model.aviones.Avion;
import ar.uba.fi.algo3.algoflight.model.juego.Escenario;
import ar.uba.fi.algo3.algoflight.model.trayectorias.Trayectoria;
import ar.uba.fi.algo3.algoflight.model.trayectorias.TrayectoriaConPuntos;
import ar.uba.fi.algo3.algoflight.model.utils.Constantes;

public class EscuchadorAlgoFlight implements KeyListener, MouseListener {

	private Escenario escenario;
	private Avion avionSeleccionado;
	private List<Posicion> listaDePosiciones = new ArrayList<Posicion>();

	public EscuchadorAlgoFlight(Escenario escenario) {
		this.escenario = escenario;
	}

	@Override
	public void keyTyped(KeyEvent e) {
		System.out.println("tipeo tecla");
	}

	@Override
	public void keyPressed(KeyEvent e) {
		System.out.println("presiono tecla");
	}

	@Override
	public void keyReleased(KeyEvent e) {
		System.out.println("libero tecla");
	}

	@Override
	public void mouseClicked(MouseEvent e) {

		Avion nuevoAvion = escenario.getAvionEnPosicion(new Posicion(e.getX()
				- Constantes.MAX_TAMANIO_AVIONES / 2, Constantes.ALTO_ESCENARIO
				- e.getY() + Constantes.MAX_TAMANIO_AVIONES / 2));
		if (nuevoAvion != null) {
			if (nuevoAvion == avionSeleccionado) {
				if (listaDePosiciones.size() > 0) {
					listaDePosiciones.add(0, avionSeleccionado.getPosicion());
					Trayectoria nuevaTrayectoria = new TrayectoriaConPuntos(
							new ArrayList<Posicion>(listaDePosiciones));
					avionSeleccionado.cambiarTrayectoria(nuevaTrayectoria);
				}
				avionSeleccionado = null;
				listaDePosiciones.clear();
			} else {
				if (avionSeleccionado == null) {
					avionSeleccionado = nuevoAvion;
				} else {
					System.out
							.println("Vuelva a seleccionar el avion inicial para settear su trayectoria");
				}
			}
		} else {
			if (avionSeleccionado != null) {
				listaDePosiciones.add(new Posicion(e.getX()
						- Constantes.MAX_TAMANIO_AVIONES / 2,
						Constantes.ALTO_ESCENARIO - e.getY()
								+ Constantes.MAX_TAMANIO_AVIONES / 2));
			}
		}
		System.out.println("click X: " + e.getX() + " Y: " + e.getY());
	}

	@Override
	public void mousePressed(MouseEvent e) {
	}

	@Override
	public void mouseReleased(MouseEvent e) {
	}

	@Override
	public void mouseEntered(MouseEvent e) {
	}

	@Override
	public void mouseExited(MouseEvent e) {
	}

}
